﻿// 3576. 分组统计.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <map>
#include <set>


using namespace std;
/*
https://www.acwing.com/problem/content/3579/
给定 n个整数 a1,a2,…,an，这 n个数对应 m个不同的数值，从小到大依次为 v1,v2,…,vm。（m≤n）

这 n个数被分到了 k个小组中。

k 个小组编号 1∼k 且每个小组都不为空。

现在，请你统计每个小组中，每个数值的数有多少个。

输入格式
第一行包含整数 T，表示共有 T组测试数据。

每组数据第一行包含整数 n，表示整数个数。

第二行包含 n个整数 a1,a2,…,an。

第三行包含 n个整数，其中第 i个整数表示 ai所在的小组编号。

输出格式
每组数据输出 k 行，第 i行输出第 i组的各数值统计情况，格式如下：

i={v_1=xx,v_2=xx,...,v_m=xx}
具体可参照样例。

数据范围
1≤T≤10
,
1≤k≤n≤100
,
1≤ai≤1000
输入样例：
2
7
3 2 3 8 8 2 3
1 2 3 2 1 3 1
7
3 2 3 8 8 2 3
1 2 3 2 1 3 1
输出样例：
1={2=0,3=2,8=1}
2={2=1,3=0,8=1}
3={2=1,3=1,8=0}
*/

const int N = 110;
set<int> total;
int a[N], b[N];
int t;

void printHASH(int idx, map<int, int>& m) {
	printf("%d={", idx);
	int len = total.size();
	for (auto& e : total) {
		printf("%d=%d", e, m[e]);
		len--;
		if (len != 0) {
			printf(",");
		}
	}
	printf("}\n");
}

void solve() {
	int n; cin >> n;
	map<int, int> mm[N];
	total.clear();
	for (int i = 0; i < n; i++) {
		cin >> a[i];
		total.insert(a[i]);
	}
	for (int i = 0; i < n; i++) {
		cin >> b[i];
		int v = b[i];
		mm[v][a[i]]++;
	}

	for (int i = 0; i <= n; i++) {
		if (mm[i].size() != 0) {
			printHASH(i, mm[i]);
		}
	}

	return;
}

int main()
{
	cin >> t;
	while (t--) {
		solve();
	}


	return 0;
}

